#pragma once

#include "MBCameraView.h"
#include "MBVec2.h"

/**
  *	An MBCameraViewWithShiftVector is used as a label in the labeling process.
  * It is a MBCameraView with a particular shift vector, that is used to
  * translate the projected areas inside the image.
  */
class MBCameraViewWithShiftVector : public MBCameraView
{
public:
	MBCameraViewWithShiftVector(
		const std::string &imagePath,
		const MBCameraModel *cameraModel,
		const MBuint &cameraPosID,
		const MBMatrix4x4 &mount,
		const MBMatrix4x4 &COP,
		const MBMatrix4x4 &SOP,
		const MBMatrix4x4 &POP = MBMatrix4x4( 1.0 ),
		const MBVec2 &shiftVector = MBVec2( 0.0, 0.0) );

	MBCameraViewWithShiftVector(
		const std::string &imagePath,
		const MBCameraModel *cameraModel,
		const MBuint &cameraPosID,
		const double &locationX,
		const double &locationY,
		const double &locationZ,
		const double &rotationX,
		const double &rotationY,
		const double &rotationZ,
		const MBVec2 &shiftVector = MBVec2( 0.0, 0.0) );

	MBCameraViewWithShiftVector(
		const MBCameraView &cameraView,
		const MBVec2 &shiftVector = MBVec2( 0.0, 0.0) );

	virtual const MBVec2 &GetTexcoordShiftVector( void ) const;
private:
	/** 2D shift vector that is used to translate the projected areas */
	MBVec2 mShiftVector;
};